/*
package com.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.boot.env.OriginTrackedMapPropertySource;
import org.springframework.context.ApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.StandardEnvironment;

*/
/**
 * 在springIOC容器加载完毕之前是获取不到环境变量的，
 * 如果一定要获取环境变量需要实现EnvironmentAware接口，来接收环境变量的类。等到IOC容器加载完毕后再来使用这个类
 * <p>
 * 这个类StandardEnvironment只能早容器加载完毕后使用。
 * <p>
 * 注入环境变量相关的信息
 *
 * @param environment
 * <p>
 * 容器加载完毕后，调用这个方法
 * @param event
 * <p>
 * 获取配置文件的环境变量
 * 配置文件的环境变量在OriginTrackedMapPropertySource类中
 *//*

public class StartReadConfiguration implements EnvironmentAware, ApplicationListener<ContextRefreshedEvent> {

    */
/**
 * 这个类StandardEnvironment只能早容器加载完毕后使用。
 *//*

    private StandardEnvironment environment;
    private JmlBeanDefinitionRegistry jmlBeanDefinitionRegistry;
    private BeanDefinitionRegistry beanDefinitionRegistry;

    @Autowired
    private ConfigurableApplicationContext applicationContext;

    */
/**
 * 注入环境变量相关的信息
 *
 * @param environment
 *//*

    @Override
    public void setEnvironment(Environment environment) {
        this.environment = (StandardEnvironment) environment;
    }


    */
/**
 * 容器加载完毕后，调用这个方法
 *
 * @param event
 *//*

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        init();
    }

    public void init() {
        jmlBeanDefinitionRegistry = applicationContext.getBeanFactory()
                .getBean("jmlBeanDefinitionRegistry", JmlBeanDefinitionRegistry.class);
        beanDefinitionRegistry = jmlBeanDefinitionRegistry.getBeanDefinitionRegistry();
        //得到所有的环境变量
        MutablePropertySources propertySources = environment.getPropertySources();
        //遍历各种类型的环境变量
        propertySources.forEach(propertySource -> {
            */
/**
 * 获取配置文件的环境变量
 * 配置文件的环境变量在OriginTrackedMapPropertySource类中
 *//*

            if (propertySource instanceof OriginTrackedMapPropertySource) {
                OriginTrackedMapPropertySource originTrackedMapPropertySource
                        = (org.springframework.boot.env.OriginTrackedMapPropertySource) propertySource;
                //通过代码放入配置文件
                originTrackedMapPropertySource.getSource().put("jml.name", "jmlNewName");
                //读取配置文件application.yml
                //originTrackedMapPropertySource.getSource().get(key);
            }
        });
    }


    private void refreshBean() {
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            BeanDefinition beanDefinition = beanDefinitionRegistry.getBeanDefinition(beanDefinitionName);
            if ("jmlRefresh".equals(beanDefinition.getScope())) {
                applicationContext.getBeanFactory().destroyBean(beanDefinitionName);
                // 卸载该bean，从容器中移除
                RefreshScope.getBeans().remove(beanDefinitionName);
                //如果存在就直接使用，如果不存在重新创建一个新的bean
                Object bean = applicationContext.getBean(beanDefinitionName);
            }
        }
    }
}
*/
